The recent revolution in technologies for dynamically sharing virtualizations of hardware resources, software, and information storage across networks has increased the reliability, scalability, and cost efficiency of computing. More specifically, the ability to provide on demand virtual computing resources and storage through the advent of virtualization has enabled consumers of processing resources and storage to flexibly structure their computing and storage costs in response to immediately perceived computing and storage needs. Virtualization allows customers to purchase processor cycles and storage at the time of demand, rather than buying or leasing fixed hardware in provisioning cycles that are dictated by the delays and costs of manufacture and deployment of hardware. Rather than depending on the accuracy of predictions of future demand to determine the availability of computing and storage, users are able to purchase the use of computing and storage resources on a relatively instantaneous as-needed basis.
Virtualized computing environments are frequently supported by block-based storage. Such block-based storage provides a storage system that is able to interact with various computing virtualizations through a series of standardized storage calls that render the block-based storage functionally agnostic to the structural and functional details of the volumes that it supports and the operating systems executing on the virtualizations to which it provides storage availability.
Some block-based storage systems utilize a server node and multiple storage nodes that are serviced by the server node or dual server nodes that service multiple storage nodes. For example, a storage area network (SAN) may include such an architecture. However, in such systems, a failure of one or more of the server nodes may result in a large amount of storage capacity served by the server node(s) being rendered unusable or may result in significant decreases in the ability of the storage system to service read and write requests.
In order to increase durability of data, some block-based storage systems may store data across multiple devices in multiple locations. For example, a SAN may span multiple locations such as different facilities or different geographic locations. Such systems may utilize a common control plane to manage data in the multiple locations. However, in such systems, a failure of a component of the common control plane may impact a large quantity of storage capacity and render the large quantity of storage capacity unavailable. Also, such systems may require extensive networks to move data between the multiple locations and may also result in high latencies for data recovery due to data being located across the multiple locations.